#include <bits/stdc++.h>
#define vec vector
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define ll long long
#define pll pair<ll,ll>
#define fs first
#define sc second
// Multiple test cases or not
// #define BATCH true
using namespace std;
void solve() {
int n; cin>>n;
vec<pll> a(n); for (int i=0;i<n;i++)cin>>a[i].sc>>a[i].fs;
sort(a.begin(), a.end());
ll l=0,r=n-1,ccnt=0,ans=0;
while(l<=r) {
// cout<<"l="<<l<<" r="<<r<<endl;
if (ccnt>=a[l].fs) {
// cout<<"1s cnt="<<a[l].sc<<endl;
ans+=a[l].sc;
ccnt+=a[l].sc;
l++;
} else {
ll df = (a[l].fs-ccnt);
// cout<<"df="<<df<<endl;
if (df < a[r].sc && df>0) {
// cout<<"2s less cnt="<<df<<endl;
a[r].sc-= df;
ans+=2*df;
ccnt+=df;
} else {
// cout<<"2s cnt="<<a[r].sc<<endl;
ans+=2*a[r].sc;
ccnt+=a[r].sc;
r--;
}
}
}
cout<<ans<<endl;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t=1;
#ifdef BATCH
cin >> t;
#endif
while (t--) solve();
}
1716A - 2-3 Moves | 1670B - Dorms War |
1716B - Permutation Chain | 987A - Infinity Gauntlet |
1676G - White-Black Balanced Subtrees | 1716D - Chip Move |
1352F - Binary String Reconstruction | 1487B - Cat Cycle |
1679C - Rooks Defenders | 56A - Bar |
1694B - Paranoid String | 35A - Shell Game |
1684A - Digit Minimization | 43B - Letter |
1017A - The Rank | 1698B - Rising Sand |
235A - LCM Challenge | 1075B - Taxi drivers and Lyft |
1562A - The Miracle and the Sleeper | 1216A - Prefixes |
1490C - Sum of Cubes | 868A - Bark to Unlock |
873B - Balanced Substring | 1401D - Maximum Distributed Tree |
1716C - Robot in a Hallway | 1688B - Patchouli's Magical Talisman |
99A - Help Far Away Kingdom | 622B - The Time |
1688C - Manipulating History | 1169D - Good Triple |